0、去查看一个测试库的慢日志文件发现有11g的大小,根本没有办法使用mysqldumpslow去查询,因此想要先对日志进行切割:
1 2 3 4 5
| split几个主要参数: -b 分割后的文档大小,单位是byte -C 分割后的文档,单行最大byte数 -d 使用数字作为后缀,同时使用-a length指定后缀长度 -l 分割后文档的行数
|
1、使用split,按大小切割日志文件,每个文件1G大小,切割后的文件名前缀为test.log,不指定后缀会使用默认后缀名aa,ab,ac….等
split slow.log -b 1G test.log
1 2 3 4 5 6 7 8 9 10 11 12
| ls -ltrh test.log* -rw-r--r-- 1 root root 1.0G Sep 12 03:08 test.logaa -rw-r--r-- 1 root root 1.0G Sep 12 03:09 test.logab -rw-r--r-- 1 root root 1.0G Sep 12 03:10 test.logac -rw-r--r-- 1 root root 1.0G Sep 12 03:11 test.logad -rw-r--r-- 1 root root 1.0G Sep 12 03:12 test.logae -rw-r--r-- 1 root root 1.0G Sep 12 03:13 test.logaf -rw-r--r-- 1 root root 1.0G Sep 12 03:14 test.logag -rw-r--r-- 1 root root 1.0G Sep 12 03:15 test.logah -rw-r--r-- 1 root root 1.0G Sep 12 03:16 test.logai -rw-r--r-- 1 root root 1.0G Sep 12 03:17 test.logaj -rw-r--r-- 1 root root 270M Sep 12 03:17 test.logak
|
2、如果需要指定后缀可使用-d -a 参数(n)代表指定附加后缀的个数,比如切割test.logaa日志文件:
split test.logaa -b 100M -d -a 2 logaa
1 2 3 4 5 6 7 8 9 10 11 12
| ll logaa* -rw-r--r-- 1 root root 100M Sep 12 09:03 logaa00 -rw-r--r-- 1 root root 100M Sep 12 09:03 logaa01 -rw-r--r-- 1 root root 100M Sep 12 09:03 logaa02 -rw-r--r-- 1 root root 100M Sep 12 09:03 logaa03 -rw-r--r-- 1 root root 100M Sep 12 09:03 logaa04 -rw-r--r-- 1 root root 100M Sep 12 09:03 logaa05 -rw-r--r-- 1 root root 100M Sep 12 09:03 logaa06 -rw-r--r-- 1 root root 100M Sep 12 09:03 logaa07 -rw-r--r-- 1 root root 100M Sep 12 09:03 logaa08 -rw-r--r-- 1 root root 100M Sep 12 09:04 logaa09 -rw-r--r-- 1 root root 24M Sep 12 09:04 logaa10
|
split test.logab -b 100M -d -a 4 logab
1 2 3 4 5 6 7 8 9 10 11 12
| ls -ltrh logab* -rw-r--r-- 1 root root 100M Sep 12 09:05 logab0000 -rw-r--r-- 1 root root 100M Sep 12 09:05 logab0001 -rw-r--r-- 1 root root 100M Sep 12 09:05 logab0002 -rw-r--r-- 1 root root 100M Sep 12 09:05 logab0003 -rw-r--r-- 1 root root 100M Sep 12 09:05 logab0004 -rw-r--r-- 1 root root 100M Sep 12 09:05 logab0005 -rw-r--r-- 1 root root 100M Sep 12 09:05 logab0006 -rw-r--r-- 1 root root 100M Sep 12 09:05 logab0007 -rw-r--r-- 1 root root 100M Sep 12 09:06 logab0008 -rw-r--r-- 1 root root 100M Sep 12 09:06 logab0009 -rw-r--r-- 1 root root 24M Sep 12 09:06 logab0010
|
4、按行切割日志文件,查看准备切割的文件有多少行:
1 2
| cat logab0001 |wc -l 505
|
按每个文件60行切割
split logab0001 -l 60 logab0001
1 2 3 4 5 6 7 8 9 10 11
| ll logab0001* -rw-r--r-- 1 root root 104857600 Sep 12 09:05 logab0001 -rw-r--r-- 1 root root 11922880 Sep 12 09:10 logab0001aa -rw-r--r-- 1 root root 12506422 Sep 12 09:10 logab0001ab -rw-r--r-- 1 root root 12506026 Sep 12 09:10 logab0001ac -rw-r--r-- 1 root root 12506635 Sep 12 09:10 logab0001ad -rw-r--r-- 1 root root 12506065 Sep 12 09:10 logab0001ae -rw-r--r-- 1 root root 12506313 Sep 12 09:10 logab0001af -rw-r--r-- 1 root root 12506206 Sep 12 09:10 logab0001ag -rw-r--r-- 1 root root 12506325 Sep 12 09:10 logab0001ah -rw-r--r-- 1 root root 5390728 Sep 12 09:10 logab0001ai
|
查看每个文件的行数
1 2 3 4 5 6 7 8 9 10 11
| for i in `ls logab0001*`;do echo "$i文件行数"`cat $i|wc -l` ;done logab0001文件行数505 logab0001aa文件行数60 logab0001ab文件行数60 logab0001ac文件行数60 logab0001ad文件行数60 logab0001ae文件行数60 logab0001af文件行数60 logab0001ag文件行数60 logab0001ah文件行数60 logab0001ai文件行数25
|
5、按每行字节数切割
指定每行字节数最多不超过2000000个字节
split logab0001aa -C 2000000 testlog
1 2 3 4 5 6 7 8 9 10 11 12
| ls -lthr testlog* -rw-r--r-- 1 root root 1.5M Sep 12 10:19 testlogaa -rw-r--r-- 1 root root 1018K Sep 12 10:19 testlogab -rw-r--r-- 1 root root 1018K Sep 12 10:19 testlogac -rw-r--r-- 1 root root 1018K Sep 12 10:19 testlogad -rw-r--r-- 1 root root 1018K Sep 12 10:19 testlogae -rw-r--r-- 1 root root 1018K Sep 12 10:19 testlogaf -rw-r--r-- 1 root root 1018K Sep 12 10:19 testlogag -rw-r--r-- 1 root root 1018K Sep 12 10:19 testlogah -rw-r--r-- 1 root root 1018K Sep 12 10:19 testlogai -rw-r--r-- 1 root root 1018K Sep 12 10:19 testlogaj -rw-r--r-- 1 root root 1018K Sep 12 10:19 testlogak
|
查看某一行的字节数
1 2
| [root@dax-mysql-slave log]# sed '1p' testlogaa|wc -c 1960374
|
字节数小于2000000
删除生成的日志文件,生成每行字节最大不超过1500000的日志文件:
split logab0001aa -C 1500000 testlog
1 2 3 4 5 6 7 8 9 10 11 12 13
| ls -lthr testlog* -rw-r--r-- 1 root root 449K Sep 12 10:22 testlogaa -rw-r--r-- 1 root root 1018K Sep 12 10:22 testlogab -rw-r--r-- 1 root root 1018K Sep 12 10:22 testlogac -rw-r--r-- 1 root root 1018K Sep 12 10:22 testlogad -rw-r--r-- 1 root root 1018K Sep 12 10:22 testlogae -rw-r--r-- 1 root root 1018K Sep 12 10:22 testlogaf -rw-r--r-- 1 root root 1018K Sep 12 10:22 testlogag -rw-r--r-- 1 root root 1018K Sep 12 10:22 testlogah -rw-r--r-- 1 root root 1018K Sep 12 10:22 testlogai -rw-r--r-- 1 root root 1018K Sep 12 10:22 testlogaj -rw-r--r-- 1 root root 1018K Sep 12 10:22 testlogak -rw-r--r-- 1 root root 1018K Sep 12 10:22 testlogal
|
查看某一行的字节数
1 2
| [root@dax-mysql-slave log]# sed '1p' testlogaa|wc -c 918219
|
字节数小于1500000
6、上面产生11g的慢日志文件主要是由于日志没有定期切割造成的,因此写了个脚本,定期对慢日志进行切割:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| #!/bin/bash #mysql慢日志所在路径 slowlogpath=/data/mysql/log #mysql慢日志文件名 slowlogname=slow.log #当前系统时间 stamp=`date +'%Y%m%d'` #与当前系统时间对比,七天前的时间 oldstamp=`date +"%Y%m%d" -d "-7 day"` #mysql用户名 username=root #mysql用户名密码 password=12345678 #mysql安装路径 dbpath=/data/mysql/bin #移动mysql慢日志 mv ${slowlogpath}/${slowlogname} ${slowlogpath}/${stamp}_${slowlogname} #重新生成slow日志文件: ${dbpath}/mysqladmin -u ${username} -p${password} flush-logs slow #删除7天前的日志文件 if [ -e ${slowlogpath}/${oldstamp}_${slowlogname} ];then sudo rm -rf ${slowlogpath}/${oldstamp}_${slowlogname} else : fi
|
将脚本添加到定时任务:
crontab -l
1
| 0 1 * * * sh /data/script/split_mysqlslowlog.sh
|